package com.testing.login;

import com.testing.sqlUtil.MysqlUtils;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Classname Login
 * @Description 类型说明
 * @Date 2020/12/26 20:52
 * @Created by 特斯汀Roy
 */
@javax.servlet.annotation.WebServlet(name = "Login")
public class Login extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("UTF-8");
        //        获取接口中的参数
        String user = request.getParameter("username");
        String pwd = request.getParameter("password");
        //调用参数变量时，记得判断是否为空，否则可能出现空指针
        //服务器运行异常，也就是出现HTTP状态码 500  internal server error
//        int i=user.length();

        //服务器随着请求的建立，创建一个session。
        HttpSession session=request.getSession();
        //设置session的有效时长为10秒。10秒之后，自动失效
        session.setMaxInactiveInterval(120);

        //获取请求中携带的cookie
        Cookie[] cookies = request.getCookies();
        //遍历cookie数组
        if(cookies!=null) {
            for (Cookie cookie : cookies) {
                System.out.println("本次cookie的内容是：" + cookie.getName() + cookie.getValue() + cookie.getMaxAge());
            }
        }

        //获取sessionid，也就是本次会话的编号。
        String sessionId=session.getId();
        System.out.println("本次session的id是："+session.getId());

        //判断本次session中是否已经有人登录过了，在登录成功之后，会设置loginName键值对，
        // 如果登录的时候，session中已经有值，则说明已经有人登录了。
        if(session.getAttribute("loginName")!=null){
            response.getWriter().append("{\"status\":-5,\"msg\":\""+"已经有用户登录过了，不能重复登录"+"\"}");
            //结束接口的调用，如果有人登录过，不往后走验证登录。
            return;
        }
        else {
            if (user != null && user.length() > 0 && pwd != null && pwd.length() > 0) {
                if (user.length() < 17 && user.length() > 1 && pwd.length() < 17 && pwd.length() > 2) {
//                判断是否包含特殊字符。
                    //制定特殊字符的规则  [^\\w-_]  表示除了 \\w和 - 以及 _之外的都是特殊字符。
                    Pattern specialWords = Pattern.compile("[^\\w-_\\u4E00-\\u9FFF]");
                    //查找user和pwd中是否包含特殊字符
                    Matcher specialuser = specialWords.matcher(user);
                    Matcher specialpwd = specialWords.matcher(pwd);
                    //找不到特殊字符的时候，才进行下一步
                    if (!specialuser.find() && !specialpwd.find()) {
                        //调用mysql查询进行验证的方法验证登录是否成功。
                        MysqlUtils roymysql = new MysqlUtils();
                        roymysql.createConnector();
                        if (roymysql.prochecklogin(user, pwd)) {
                            response.getWriter().append("{\"status\":1,\"msg\":\"" + "恭喜您，登录成功" + "\"}");
                            //登录成功之后在session中以键值对的形式来记录信息。
                            session.setAttribute("loginName", user);
//                            //登录成功之后，返回JSESSIONID的cookie，设置生命周期不为session有效。
                            //设置JSESSIONID就为本次session的id值
                            Cookie sessionCookie=new Cookie("JSESSIONID",sessionId);
                            //设置生命周期为30秒
                            sessionCookie.setMaxAge(120);
                            //返回JSESSIONID的cookie
                            response.addCookie(sessionCookie);
                        } else {
                            response.getWriter().append("{\"status\":-1,\"msg\":\"" + "用户名密码错误" + "\"}");
                        }
                    } else {
                        response.getWriter().append("{\"status\":-2,\"msg\":\"" + "用户名密码中不能包含特殊字符" + "\"}");
                    }
                } else {
                    response.getWriter().append("{\"status\":-3,\"msg\":\"" + "\\u7528\\u6237\\u540d\\u5bc6\\u7801\\u957f\\u5ea6\\u9700\\u8981\\u662f\\u0033\\u002d\\u0031\\u0036\\u4f4d" + "\"}");
                }
            } else {
                response.getWriter().append("{\"status\":-4,\"msg\":\"" + "用户名密码不能为空" + "\"}");
            }
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("UTF-8");
//        获取接口中的参数
        String user = request.getParameter("username");
        String pwd = request.getParameter("password");
        //调用参数变量时，记得判断是否为空，否则可能出现空指针
        //服务器运行异常，也就是出现HTTP状态码 500  internal server error
//        int i=user.length();

        if(user!=null&&user.length()>0&&pwd!=null&&pwd.length()>0){
            if(user.length()<17&&user.length()>2&&pwd.length()<17&&pwd.length()>2){
                if("Roy".equals(user)&&"123456".equals(pwd)){
                    response.getWriter().append("恭喜您，登录成功");
                }
                else{
                    response.getWriter().append("用户名密码错误");
                }
            }
            else{
                response.getWriter().append("用户名密码长度需要是3-16位");
            }
        }
        else{
            response.getWriter().append("用户名密码不能为空");
        }

        response.getWriter().append("get方法被调用了").append("用户名是"+user).append("密码是"+pwd);
    }
}
